package com.haidong;

import com.haidong.dao.UserDao;
import com.haidong.domain.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.ArrayList;
import java.util.List;

/**
 * 该类测试mybatisPlus增删改
 */
@SpringBootTest
class MybatisplusApplicationTest3 {
    @Autowired
    private UserDao userDao;

    @Test
    void testSave() {
        for (int i = 0; i < 5; i++) {
            User user = new User();
            user.setName("黑马程序员");
            user.setPassword("itheima");
            user.setAge(12);
            user.setTel("4006184000");
            userDao.insert(user);
        }
    }

    @Test
    void testDelete() {
        // 测试删除多条记录
        List<Long> list = new ArrayList<>();
//        list.add(1556477268676882433L);
//        list.add(1556479805727514625L);
//        list.add(1556480032166170626L);
//        list.add(1556480034166853634L);
//        list.add(1556480034166853635L);
//        list.add(1556480034166853636L);
//        list.add(1556480034166853637L);
//        list.add(1556480034229768194L);
//        list.add(1556480034229768195L);
//        list.add(1556480034229768196L);
//        list.add(1556480034296877057L);
//        list.add(1556480034296877058L);

        // 可以直接使用id集合删除元素,实现不难,相当于语法糖
        // 查询也可以批量id,不演示
//        userDao.deleteBatchIds(list);
        // 现在我们给封装类加上了tableLogic注解,删除会被重定向到update
        userDao.deleteById(1L);
    }

    @Test
    void testUpdate() {
        // 先根据id获取到version数值,然后修改后再update
//        User user = userDao.selectById(3L);
//        user.setName("Jack666");
//        userDao.updateById(user);

        // 模拟乐观锁原理,其实就是互斥
        User user1 = userDao.selectById(3L);
        User user2 = userDao.selectById(3L);
        user1.setName("jack123");
        userDao.updateById(user1); // 执行之前会验证version是否没变,之后会把version+1
        user2.setName("jack456");
        userDao.updateById(user2); // 这个时候version和查询时不一样了,会更新失败
    }
}
